/**
 * PanelMaterias.java
 */

 /**
 *  AdSec: Administrador de Secundarias
 *  Copyright (C) 2009 Daniela Ramírez Chaves (dannyrch@gmail.com)
 *  Copyright (C) 2009 Leonel Salazar Valverde (leo87sv@gmail.com)
 *
 *  This file is part of AdSec.
 *  AdSec is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  AdSec is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with AdSec.  If not, see <http://www.gnu.org/licenses/>.
 */

package adsec.presentacion;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.LinkedList;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import adsec.entidades.Estado;
import adsec.entidades.LlaveValor;
import adsec.entidades.Materia;
import adsec.entidades.Nivel;
import adsec.entidades.Permiso;
import adsec.negocios.AdministradorSeguridad;
import adsec.negocios.ControladoraMateria;
import adsec.negocios.UtilidadesCapaNegocios;
import org.jdesktop.application.Action;

public class PanelMaterias extends javax.swing.JPanel implements ListSelectionListener, ActionListener{

    private AdministradorSeguridad adminSeguridad;
    private ControladoraMateria controladoraMateria;
    private Permiso permisoMateria;
    private Estado estado;
    private int idMateria;
    private LinkedList<Materia> materiasDisponibles;
    private LinkedList<Materia> materiasRequisitos;

    /** Creates new form PanelNivelSeccion */
    public PanelMaterias() {
        initComponents();
    }

    public void iniciarPanelMaterias(){
        this.adminSeguridad = AdministradorSeguridad.getInstancia();
        this.controladoraMateria = new ControladoraMateria();
        this.permisoMateria = this.adminSeguridad.getPermiso(UtilidadesCapaNegocios.moduloMaterias);
        this.estado = new Estado();
        this.idMateria = -1;
        this.materiasDisponibles = new LinkedList<Materia>();
        this.materiasRequisitos = new LinkedList<Materia>();
        this.setHabilitarCampos(false);
        this.habilitarBotonesIME(this.permisoMateria.isInsertar(), false, false);
        this.habilitarAceptarCancelar(false);
        this.cargarGridMaterias();
        
    }//fin de iniciarPanelMaterias
    
    /**
     ** Recibe un boolean para habilitar todos los campos de la pantalla
     ** o ya sea deshabilitarlos
     **/
    private void setHabilitarCampos(boolean habilitar){
        this.cbNivel.setEnabled(habilitar);
        this.cbMaterias.setEnabled(habilitar);
        this.cbNivelRequisitos.setEnabled(habilitar);
        this.cbTipoMateria.setEnabled(habilitar);
        this.listaDisponibles.setEnabled(habilitar);
        this.listaRequisitos.setEnabled(habilitar);
		this.btnAgregarUno.setEnabled(habilitar);
		this.btnAgregarTodos.setEnabled(habilitar);
		this.btnRemoverUno.setEnabled(habilitar);
		this.btnRemoverTodos.setEnabled(habilitar);
    }//fin de setHabilitarCampos

    /**
     ** Habilita o deshabilita los botones insertar, modificar y eliminar
     **/
    private void habilitarBotonesIME(boolean insertar, boolean modificar, boolean eliminar){
        this.btnInsertar.setEnabled(insertar);
        this.btnModificar.setEnabled(modificar);
        this.btnEliminar.setEnabled(eliminar);
    }

    /**
     ** Habilita o deshabilita los botones aceptar y cancelar
     **/
    private void habilitarAceptarCancelar(boolean habilitar){
        this.btnAceptar.setEnabled(habilitar);
        this.btnCancelar.setEnabled(habilitar);
    }

    private void cargarNiveles(){
        ((DefaultComboBoxModel) this.cbNivel.getModel()).removeAllElements();
        ((DefaultComboBoxModel) this.cbNivelRequisitos.getModel()).removeAllElements();
        LinkedList<Nivel> listaNiveles = this.controladoraMateria.consultarNiveles();
        Iterator<Nivel> iterador = listaNiveles.iterator();
        ((DefaultComboBoxModel) this.cbNivelRequisitos.getModel()).addElement("");
        while(iterador.hasNext()){
            Nivel nivel = iterador.next();
            ((DefaultComboBoxModel) this.cbNivel.getModel()).addElement(nivel.getNivel());
            ((DefaultComboBoxModel) this.cbNivelRequisitos.getModel()).addElement(nivel.getNivel());
        }
    }//fin de cargarNiveles

    /**
     ** Limpia todos los campos de la pantalla
     **/
    private void limpiarCampos(){
        this.limpiarComboBoxes();
        this.limpiarListas();
    }//fin de limpiarCampos

    private void limpiarComboBoxes(){
        ((DefaultComboBoxModel) this.cbNivel.getModel()).removeAllElements();
        ((DefaultComboBoxModel) this.cbMaterias.getModel()).removeAllElements();
        ((DefaultComboBoxModel) this.cbNivelRequisitos.getModel()).removeAllElements();
        ((DefaultComboBoxModel) this.cbTipoMateria.getModel()).removeAllElements();
    }//fin de limpiarComboBoxes

    private void limpiarListas(){
        this.materiasDisponibles.clear();
        this.materiasRequisitos.clear();
        ((DefaultListModel)listaDisponibles.getModel()).clear();
        ((DefaultListModel)listaRequisitos.getModel()).clear();
    }//fin de limpiarListas

    private void insertarMateria(){
        Materia materia = obtenerDatosMateria();
        LinkedList<LlaveValor> listaLlaves = new LinkedList<LlaveValor>();
        listaLlaves.add(new LlaveValor(Materia.nombreNC, materia.getNombre()));
        listaLlaves.add(new LlaveValor(Materia.nivelNC, materia.getNivel()));
        if(!UtilidadesCapaNegocios.existenLlaves(Materia.nombreTabla, listaLlaves)){
            int resultado = this.controladoraMateria.insertarMateria(materia, this.materiasRequisitos);
            if(resultado == UtilidadesCapaNegocios.QUERY_OK){
                this.gridMaterias.getSelectionModel().clearSelection();
                JOptionPane.showMessageDialog(null, "La materia fue insertada exitosamente");
                this.volverConsultar();
            }else{
                String mensaje = UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloMaterias, UtilidadesCapaNegocios.opInsertar);
                JOptionPane.showMessageDialog(null, mensaje, "ERROR",JOptionPane.ERROR_MESSAGE);
            }
        }else{
            JOptionPane.showMessageDialog(null, "La materia con el nombre " + materia.getNombre() + " ya existe para el nivel seleccionado", "ERROR", JOptionPane.ERROR_MESSAGE);
        }
    }//fin de insertarMateria

    private void modificarMateria(){
        Materia materia = obtenerDatosMateria();
        int resultado = this.controladoraMateria.modificarMateria(materia, this.materiasRequisitos);
        if(resultado == UtilidadesCapaNegocios.QUERY_OK){
            this.gridMaterias.getSelectionModel().clearSelection();
            JOptionPane.showMessageDialog(null, "La materia fue modificada exitosamente");
            this.volverConsultar();
        }else{
            String mensaje = UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloMaterias, UtilidadesCapaNegocios.opModificar);
            JOptionPane.showMessageDialog(null, mensaje, "ERROR",JOptionPane.ERROR_MESSAGE);
        }
    }//fin de modificarMateria

    private void eliminarMateria(){
        int fila = this.gridMaterias.getSelectedRow();
        if(fila >= 0){
            int resultado = this.controladoraMateria.eliminarMateria(idMateria);
            if(resultado == UtilidadesCapaNegocios.QUERY_OK){
                this.gridMaterias.getSelectionModel().clearSelection();
                JOptionPane.showMessageDialog(null, "La materia fue eliminada exitosamente");
                this.volverConsultar();
                this.limpiarCampos();
            }else{
                String mensaje = UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloMaterias, UtilidadesCapaNegocios.opEliminar);
                JOptionPane.showMessageDialog(null, mensaje, "ERROR",JOptionPane.ERROR_MESSAGE);
            }
        }
    }//fin de eliminarMateria

    private void volverConsultar(){
        this.estado.setEstadoActual(Estado.CONSULTAR);
        this.habilitarBotonesIME(permisoMateria.isInsertar(), false, false);
        this.setHabilitarCampos(false);
        this.habilitarAceptarCancelar(false);
        this.cargarGridMaterias();
    }//fin de volverConsultar

     private void consultarMateria(Materia materia){
        if(materia != null){
            this.idMateria = materia.getIdMateria();
            this.cargarNiveles();
            this.cbNivel.setSelectedItem(materia.getNivel());
            this.cbMaterias.setSelectedItem(materia.getNombre());
            this.cbTipoMateria.setSelectedIndex(materia.getTipoMateria());
            this.habilitarBotonesIME(permisoMateria.isInsertar(), permisoMateria.isModificar(), permisoMateria.isEliminar());
        }else{
            String mensaje = UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloMaterias, UtilidadesCapaNegocios.opConsultar);
            JOptionPane.showMessageDialog(null, mensaje, "ERROR",JOptionPane.ERROR_MESSAGE);
        }
     }//fin de consultarMateria

    /**
     ** Obtiene todos los datos del materia y crea un objeto de tipo Materia
     ** el cual es retornado
     ** @return Un Materia
     */
    public Materia obtenerDatosMateria(){
        Materia materia = new Materia();
        /*if(this.estado.getEstadoActual() != Estado.INSERTAR){
            materia.setIdMateria(this.idMateria);
        }*/
        materia.setIdMateria(this.idMateria);
        materia.setNombre(this.cbMaterias.getSelectedItem().toString());
        materia.setNivel(Integer.parseInt(this.cbNivel.getSelectedItem().toString()));
        materia.setTipoMateria(this.cbTipoMateria.getSelectedIndex());
        return materia;
    }//fin de obtenerDatosMateria

    private void cargarGridMaterias(){
        this.limpiarGridMaterias();
        if(this.permisoMateria.isConsultar()){
            LinkedList<Materia> materias = controladoraMateria.consultarMaterias();
            Iterator<Materia> iterador = materias.iterator();
            while(iterador.hasNext()){
                Materia materia = iterador.next();
                Object arregloDatos[] = new Object[3];
                arregloDatos[0] = materia.getNombre();
                arregloDatos[1] = materia.getNivel();
                arregloDatos[2] = Materia.tiposMaterias[materia.getTipoMateria()];
                ((DefaultTableModel)this.gridMaterias.getModel()).addRow(arregloDatos);
            }//fin de while
        }
    }//fin de cargarGridMaterias

    private void limpiarGridMaterias(){
        ((DefaultTableModel)this.gridMaterias.getModel()).setRowCount(0);
    }//fin de limpiarGridMaterias

    public void valueChanged(ListSelectionEvent evento){
        int filas = ((DefaultTableModel)this.gridMaterias.getModel()).getRowCount();
        if(filas > 0 && estado.getEstadoActual() == Estado.CONSULTAR && evento.getValueIsAdjusting()){
            int fila = this.gridMaterias.getSelectedRow();
            if(fila >= 0){
                Materia materia = this.controladoraMateria.consultarMateriaGrid(fila);
                this.idMateria = -1;
                this.consultarMateria(materia);
                this.cargarRequisitosMateria(idMateria);
            }//fin de if
        }//fin de if
    }//fin de método valueChanged

    public void actionPerformed(ActionEvent evento){
        JComboBox fuente = (JComboBox) evento.getSource();
        if(fuente == this.cbNivelRequisitos){
            Object seleccionado = cbNivelRequisitos.getSelectedItem();
            if( seleccionado != null && seleccionado.toString().length() > 0){
                Integer seleccion = (Integer) seleccionado;
                if(seleccion != null){
                    int nivel = seleccion.intValue();
                    this.cargarMateriasDisponibles(nivel);
                }
            }//fin de if
        }
        if(fuente == this.cbNivel){
            Integer seleccion = (Integer) cbNivel.getSelectedItem();
            if(seleccion != null){
                int nivel = seleccion.intValue();
                this.cargarMateriasNivel(nivel);
            }
        }
        if(fuente == this.cbMaterias){
            String seleccion = (String) cbMaterias.getSelectedItem();
            if(seleccion != null){
                this.cargarTiposMateria();
            }
        }
    }//fin de itemStateChanged

    private void cargarMateriasDisponibles(int nivel){
        this.materiasDisponibles = this.controladoraMateria.consultarMateriasNivel(nivel);
        ((DefaultListModel)this.listaDisponibles.getModel()).removeAllElements();
        Iterator<Materia> iterador = this.materiasDisponibles.iterator();
        while(iterador.hasNext()){
            Materia materia = iterador.next();
            ((DefaultListModel)this.listaDisponibles.getModel()).addElement(new String(materia.getNombre() + " " + materia.getNivel()));
        }
    }//fin de cargarMateriasDisponibles

    private void cargarRequisitosMateria(int idMateria){
        this.materiasRequisitos = this.controladoraMateria.consultarRequisitosMateria(idMateria);
        ((DefaultListModel)this.listaRequisitos.getModel()).removeAllElements();
        Iterator<Materia> iterador = this.materiasRequisitos.iterator();
        while(iterador.hasNext()){
            Materia materia = iterador.next();
            ((DefaultListModel)this.listaRequisitos.getModel()).addElement(new String(materia.getNombre() + " " + materia.getNivel()));
        }
    }//fin de cargarRequisitosMateria

    private void cargarMateriasNivel(int nivel){
        ((DefaultComboBoxModel)cbMaterias.getModel()).removeAllElements();
        this.materiasDisponibles = this.controladoraMateria.consultarMateriasNivel(nivel);
        Iterator<Materia> iterador = this.materiasDisponibles.iterator();
        while(iterador.hasNext()){
            Materia materia = iterador.next();
            ((DefaultComboBoxModel)this.cbMaterias.getModel()).addElement(new String(materia.getNombre()));
        }
    }//fin de cargarMateriasNivel

    private boolean validarDatos(){
        boolean resultado = true;
        /*String password = new String(txtPassword.getPassword());
        String confirmacion = new String(txtConfirmar.getPassword());
        resultado &= (password.equals(confirmacion));
        if(!resultado){
            JOptionPane.showMessageDialog(null, "La contraseña que escribió no es igual a la que confirmó. Intente de nuevo por favor", "ERROR",JOptionPane.WARNING_MESSAGE);
        }*/
        return resultado;
    }//fin de validarDatos

    private boolean verificarDatosObligatorios(){
        boolean resultado = true;
        if(cbNivel.getSelectedItem() != null && cbMaterias.getSelectedItem() != null){
            resultado &= !(cbNivel.getSelectedItem().toString().trim().isEmpty());
            resultado &= !(cbMaterias.getSelectedItem().toString().trim().isEmpty());
        }else{
            resultado = false;
        }
        
        if(!resultado){
            JOptionPane.showMessageDialog(null, "El nombre de la materia y el nivel son obligatorios", "ERROR",JOptionPane.WARNING_MESSAGE);
        }
        return resultado;
    }//fin de verificarDatosObligatorios

    private void cargarTiposMateria(){
        ((DefaultComboBoxModel)cbTipoMateria.getModel()).removeAllElements();
        for(int i = 0; i < Materia.tiposMaterias.length; i++){
            ((DefaultComboBoxModel)this.cbTipoMateria.getModel()).addElement(Materia.tiposMaterias[i]);
        }
    }

    @Action
    public void insertandoMateria() {
        this.estado.setEstadoActual(Estado.INSERTAR);
        this.limpiarCampos();
        this.setHabilitarCampos(true);
        this.habilitarBotonesIME(false, false, false);
        this.habilitarAceptarCancelar(true);
        this.cargarNiveles();
    }//fin de insertandoMateria

    @Action
    public void modificandoMateria() {
        this.estado.setEstadoActual(Estado.MODIFICAR);
        this.setHabilitarCampos(true);
        this.habilitarBotonesIME(false, false, false);
        this.habilitarAceptarCancelar(true);
    }//fin de modificandoMateria

    @Action
    public void eliminandoMateria() {
        Animador.animar();
        if(this.mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opEliminar, "ELIMINAR")){
            this.eliminarMateria();
            this.limpiarCampos();
        }
        Animador.detenerAnimacion();
    }//fin de eliminandoMateria

    /**
     ** Muestra un mensaje de confirmación para que el usuario decida si realmente
     ** quiere llevar a cabo una operación
     ** @param operacion Código de operación realizada, tomada de UtilidadesCapaNegocios
     ** @param titulo Título a mostrar en el cuadro de confirmación
     ** @return Confirmación: true si el usuario acepta, false en otro caso.
     **/
    private boolean mostrarMensajeConfirmacion(int operacion,String titulo){
        boolean resultado = true;
        String mensaje = UtilidadesCapaNegocios.getMensajeConfirmacion(UtilidadesCapaNegocios.moduloMaterias, operacion);
        int respuesta = JOptionPane.showConfirmDialog(null, mensaje,titulo ,JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE);
        resultado = respuesta == JOptionPane.OK_OPTION;
        return resultado;
    }//fin de mostrarMensajeConfirmacion

    @Action
    public void accionAceptar() {
        Animador.animar();
        switch(estado.getEstadoActual()){
            case Estado.INSERTAR:
                if(mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opInsertar, "INSERTAR")){
                    if(verificarDatosObligatorios() && validarDatos()){
                        this.insertarMateria();
                    }
                }
            break;
            case Estado.MODIFICAR:
                if(mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opModificar, "MODIFICAR")){
                    if(verificarDatosObligatorios() && validarDatos()){
                        this.modificarMateria();
                    }
                }
            break;
        }//fin de switch
        Animador.detenerAnimacion();
    }//fin de accionAceptar

    @Action
    public void accionCancelar() {
        this.limpiarCampos();
        this.volverConsultar();
    }//fin de accionCancelar

    @Action
    public void agregarUno(){
        if(!this.listaDisponibles.isSelectionEmpty()){
            int[] indices = this.listaDisponibles.getSelectedIndices();
            if(indices.length > 0){
                for(int i = indices.length - 1; i>= 0; i--){
                    Materia materia = materiasDisponibles.get(indices[i]);
                    String materiaNivel = materia.getNombre() + " " + materia.getNivel();
                    materiasRequisitos.add(materia);
                    ((DefaultListModel)listaRequisitos.getModel()).addElement(materiaNivel);
                    materiasDisponibles.remove(indices[i]);
                    ((DefaultListModel)listaDisponibles.getModel()).remove(indices[i]);
                }
            }
        }
    }//fin de agregarUno

    @Action
    public void removerUno(){
        if(!this.listaRequisitos.isSelectionEmpty()){
            int[] indices = this.listaRequisitos.getSelectedIndices();
            if(indices.length > 0){
                for(int i = indices.length - 1; i>= 0; i--){
                    Materia materia = materiasRequisitos.get(indices[i]);
                    String materiaNivel = materia.getNombre() + " " + materia.getNivel();
                    materiasDisponibles.add(materia);
                    ((DefaultListModel)listaDisponibles.getModel()).addElement(materiaNivel);
                    materiasRequisitos.remove(indices[i]);
                    ((DefaultListModel)listaRequisitos.getModel()).remove(indices[i]);
                }
            }
        }
    }//fin de removerUno

    @Action
    public void agregarTodos(){
        Iterator<Materia> iterador = this.materiasDisponibles.iterator();
        while(iterador.hasNext()){
            Materia materia = iterador.next();
            String materiaNivel = materia.getNombre() + " " + materia.getNivel();
            this.materiasRequisitos.add(materia);
            ((DefaultListModel)listaRequisitos.getModel()).addElement(materiaNivel);
            ((DefaultListModel)listaDisponibles.getModel()).removeElement(materiaNivel);
            iterador.remove();
        }
    }//fin de agregarTodos

    @Action
    public void removerTodos(){
        Iterator<Materia> iterador = this.materiasRequisitos.iterator();
        while(iterador.hasNext()){
            Materia materia = iterador.next();
            String materiaNivel = materia.getNombre() + " " + materia.getNivel();
            this.materiasDisponibles.add(materia);
            ((DefaultListModel)listaDisponibles.getModel()).addElement(materiaNivel);
            ((DefaultListModel)listaRequisitos.getModel()).removeElement(materiaNivel);
            iterador.remove();
        }
    }//fin de removerTodos

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        scrollGrid = new javax.swing.JScrollPane();
        gridMaterias = new javax.swing.JTable();
        btnCancelar = new javax.swing.JButton();
        btnAceptar = new javax.swing.JButton();
        lbNivel = new javax.swing.JLabel();
        cbNivel = new javax.swing.JComboBox();
        jLabel2 = new javax.swing.JLabel();
        btnModificar = new javax.swing.JButton();
        btnInsertar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();
        lbNivel1 = new javax.swing.JLabel();
        cbNivelRequisitos = new javax.swing.JComboBox();
        scrollListaDisponibles = new javax.swing.JScrollPane();
        listaDisponibles = new javax.swing.JList(new DefaultListModel());
        btnAgregarUno = new javax.swing.JButton();
        btnRemoverUno = new javax.swing.JButton();
        btnAgregarTodos = new javax.swing.JButton();
        btnRemoverTodos = new javax.swing.JButton();
        scrollListaRequisitos = new javax.swing.JScrollPane();
        listaRequisitos = new javax.swing.JList(new DefaultListModel());
        cbMaterias = new javax.swing.JComboBox();
        lbTipoMateria = new javax.swing.JLabel();
        cbTipoMateria = new javax.swing.JComboBox();

        setMinimumSize(new java.awt.Dimension(660, 600));
        setName("Form"); // NOI18N
        setPreferredSize(new java.awt.Dimension(660, 600));

        scrollGrid.setName("scrollGrid"); // NOI18N

        gridMaterias.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Materia", "Nivel", "Tipo de Materia"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        gridMaterias.setName("gridMaterias"); // NOI18N
        scrollGrid.setViewportView(gridMaterias);
        gridMaterias.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        gridMaterias.getSelectionModel().addListSelectionListener(this);

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(adsec.presentacion.LiceoEscazuApp.class).getContext().getActionMap(PanelMaterias.class, this);
        btnCancelar.setAction(actionMap.get("accionCancelar")); // NOI18N
        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(adsec.presentacion.LiceoEscazuApp.class).getContext().getResourceMap(PanelMaterias.class);
        btnCancelar.setText(resourceMap.getString("btnCancelar.text")); // NOI18N
        btnCancelar.setName("btnCancelar"); // NOI18N

        btnAceptar.setAction(actionMap.get("accionAceptar")); // NOI18N
        btnAceptar.setText(resourceMap.getString("btnAceptar.text")); // NOI18N
        btnAceptar.setName("btnAceptar"); // NOI18N

        lbNivel.setText(resourceMap.getString("lbNivel.text")); // NOI18N
        lbNivel.setName("lbNivel"); // NOI18N

        cbNivel.setName("cbNivel"); // NOI18N

        jLabel2.setText(resourceMap.getString("jLabel2.text")); // NOI18N
        jLabel2.setName("jLabel2"); // NOI18N

        btnModificar.setAction(actionMap.get("modificandoMateria")); // NOI18N
        btnModificar.setText(resourceMap.getString("btnModificar.text")); // NOI18N
        btnModificar.setName("btnModificar"); // NOI18N

        btnInsertar.setAction(actionMap.get("insertandoMateria")); // NOI18N
        btnInsertar.setText(resourceMap.getString("btnInsertar.text")); // NOI18N
        btnInsertar.setName("btnInsertar"); // NOI18N

        btnEliminar.setAction(actionMap.get("eliminandoMateria")); // NOI18N
        btnEliminar.setText(resourceMap.getString("btnEliminar.text")); // NOI18N
        btnEliminar.setName("btnEliminar"); // NOI18N

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(resourceMap.getString("jPanel1.border.title"))); // NOI18N
        jPanel1.setName("jPanel1"); // NOI18N

        lbNivel1.setText(resourceMap.getString("lbNivel1.text")); // NOI18N
        lbNivel1.setName("lbNivel1"); // NOI18N

        cbNivelRequisitos.setName("cbNivelRequisitos"); // NOI18N

        scrollListaDisponibles.setBorder(javax.swing.BorderFactory.createTitledBorder(resourceMap.getString("scrollListaDisponibles.border.title"))); // NOI18N
        scrollListaDisponibles.setName("scrollListaDisponibles"); // NOI18N

        listaDisponibles.setName("listaDisponibles"); // NOI18N
        scrollListaDisponibles.setViewportView(listaDisponibles);

        btnAgregarUno.setAction(actionMap.get("agregarUno")); // NOI18N
        btnAgregarUno.setText(resourceMap.getString("btnAgregarUno.text")); // NOI18N
        btnAgregarUno.setEnabled(false);
        btnAgregarUno.setName("btnAgregarUno"); // NOI18N

        btnRemoverUno.setAction(actionMap.get("removerUno")); // NOI18N
        btnRemoverUno.setText(resourceMap.getString("btnRemoverUno.text")); // NOI18N
        btnRemoverUno.setEnabled(false);
        btnRemoverUno.setName("btnRemoverUno"); // NOI18N

        btnAgregarTodos.setAction(actionMap.get("agregarTodos")); // NOI18N
        btnAgregarTodos.setText(resourceMap.getString("btnAgregarTodos.text")); // NOI18N
        btnAgregarTodos.setEnabled(false);
        btnAgregarTodos.setName("btnAgregarTodos"); // NOI18N

        btnRemoverTodos.setAction(actionMap.get("removerTodos")); // NOI18N
        btnRemoverTodos.setText(resourceMap.getString("btnRemoverTodos.text")); // NOI18N
        btnRemoverTodos.setEnabled(false);
        btnRemoverTodos.setName("btnRemoverTodos"); // NOI18N

        scrollListaRequisitos.setBorder(javax.swing.BorderFactory.createTitledBorder(resourceMap.getString("scrollListaRequisitos.border.title"))); // NOI18N
        scrollListaRequisitos.setName("scrollListaRequisitos"); // NOI18N

        listaRequisitos.setName("listaRequisitos"); // NOI18N
        scrollListaRequisitos.setViewportView(listaRequisitos);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(lbNivel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(cbNivelRequisitos, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(scrollListaDisponibles, javax.swing.GroupLayout.PREFERRED_SIZE, 256, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(btnRemoverTodos, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(btnAgregarTodos, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(btnRemoverUno, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(btnAgregarUno, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(scrollListaRequisitos, javax.swing.GroupLayout.PREFERRED_SIZE, 256, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(84, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cbNivelRequisitos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbNivel1))
                .addGap(18, 18, 18)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(scrollListaRequisitos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(scrollListaDisponibles, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(56, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap(75, Short.MAX_VALUE)
                .addComponent(btnAgregarUno)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnRemoverUno)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnAgregarTodos)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnRemoverTodos)
                .addGap(63, 63, 63))
        );

        cbNivelRequisitos.addActionListener(this);

        cbMaterias.setEditable(true);
        cbMaterias.setName("cbMaterias"); // NOI18N

        lbTipoMateria.setText(resourceMap.getString("lbTipoMateria.text")); // NOI18N
        lbTipoMateria.setName("lbTipoMateria"); // NOI18N

        cbTipoMateria.setName("cbTipoMateria"); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addContainerGap())
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(18, 18, 18)
                                .addComponent(lbNivel))
                            .addComponent(jLabel2))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(cbMaterias, javax.swing.GroupLayout.PREFERRED_SIZE, 169, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18)
                                .addComponent(lbTipoMateria)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(cbTipoMateria, javax.swing.GroupLayout.PREFERRED_SIZE, 142, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(cbNivel, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(201, 201, 201))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 481, Short.MAX_VALUE)
                        .addComponent(btnInsertar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnModificar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btnEliminar)
                        .addGap(12, 12, 12))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(scrollGrid, javax.swing.GroupLayout.DEFAULT_SIZE, 692, Short.MAX_VALUE)
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addComponent(btnAceptar)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(btnCancelar)))
                        .addContainerGap())))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnEliminar)
                    .addComponent(btnModificar)
                    .addComponent(btnInsertar))
                .addGap(8, 8, 8)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbNivel)
                    .addComponent(cbNivel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(15, 15, 15)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(cbMaterias, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbTipoMateria)
                    .addComponent(cbTipoMateria, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(scrollGrid, javax.swing.GroupLayout.PREFERRED_SIZE, 132, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnCancelar)
                    .addComponent(btnAceptar))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        cbNivel.addActionListener(this);
        cbMaterias.addActionListener(this);
    }// </editor-fold>//GEN-END:initComponents


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAceptar;
    private javax.swing.JButton btnAgregarTodos;
    private javax.swing.JButton btnAgregarUno;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnInsertar;
    private javax.swing.JButton btnModificar;
    private javax.swing.JButton btnRemoverTodos;
    private javax.swing.JButton btnRemoverUno;
    private javax.swing.JComboBox cbMaterias;
    private javax.swing.JComboBox cbNivel;
    private javax.swing.JComboBox cbNivelRequisitos;
    private javax.swing.JComboBox cbTipoMateria;
    private javax.swing.JTable gridMaterias;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JLabel lbNivel;
    private javax.swing.JLabel lbNivel1;
    private javax.swing.JLabel lbTipoMateria;
    private javax.swing.JList listaDisponibles;
    private javax.swing.JList listaRequisitos;
    private javax.swing.JScrollPane scrollGrid;
    private javax.swing.JScrollPane scrollListaDisponibles;
    private javax.swing.JScrollPane scrollListaRequisitos;
    // End of variables declaration//GEN-END:variables

}
